import java.util.Arrays;
import java.util.Scanner;

public class JavaException {
    public static void test(int[] array) throws CloneNotSupportedException {
        if(array==null) {
              System.out.println("dada");
              throw new NullPointerException();//手动抛出一个异常,程序运行到这里已经被中断了
        }
    }
    public static void main1(String[] args) throws CloneNotSupportedException{
        try {
            test(null);
            System.out.println("hha"); //只要前面抛异常了这边就不会执行
        }catch(NullPointerException e) {
            //e.printStackTrace();  //打印栈上信息(异常信息)
            System.out.println("捕捉到了 NullPointerException 异常，进行处理异常的逻辑");
        }
        System.out.println("正常逻辑执行.........");
    }


    public static void main2(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int a=scanner.nextInt();
        try {
            int[] array=null;
            System.out.println(array.length);   //当try当中存在多个异常的时候，从上往下执行，谁先抛出异常就先捕获那个异常，不会在同一时间抛出两个及以上的异常
            System.out.println(10/0);
        }catch (NullPointerException |ArrayIndexOutOfBoundsException e) {     //catch异常书写的先后顺序不影响异常的捕获
            System.out.println("捕获到了 NullPointerException | ArrayIndexOutOfBoundsException 异常");
        }catch (ArithmeticException e) {
            System.out.println("捕获到了 ArithmeticException 异常");
        }catch (Exception e) {
            System.out.println("捕获到了所有异常");
        }finally {
            scanner.close();
            System.out.println("finally....");  //一般用于资源的释放，不管是否抛出异常都会执行
        }
        System.out.println("正常逻辑.....");
    }


    public static void func1() {
        int[] array=new int[10];
        System.out.println(array[20]);
    }
    public static void main(String[] args) {
        try {
            func1();     //如果在func中没有处理异常，就会将异常传递给上层调用者，[这里的话就是main，因为main方法中调用了func()] ,如果main方法中没有处理该异常
                         //就会交给jvm来处理，最终变会直接中断程序
        }catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("捕获到了 ArrayIndexOutOfBoundsException 异常");
        }finally {
            System.out.println("finally....");
        }
        System.out.println("正常执行的代码!");
    }
}
